In the context of the present disclosure, the expression “synchronization error” relates to a software error caused by faulty or insufficient synchronization of the software units of the system.
A particular case of a synchronization error is a “race condition”. A race condition relates to the possibility that a software error can occur and does not necessarily appear at every execution of the system. Such a race condition can occur, for example, as a result of non-deterministic side-effects on execution of the system. Race conditions are therefore non-deterministic and undesirable effects and are therefore errors, which can occur due to parallelism in the system.
Cited Reference [10], page 75 defines race conditions in a more precise, expanded and formalized way. According to this, race conditions are errors which can occur in programs and have the effect that programs show non-deterministic behavior. Data races, by contrast, are errors in programs, where shared data is accessed in a critical region and become changed. The overarching concept of “races” is used in the present application to denote both race conditions and data races.
The use of asynchronously operating software units for processing parallel instruction blocks occurs for a plurality of reasons. An important reason is efficiency enhancement through improved capacity utilization in the system, for example, a computer system. Whereas the software system must wait for input from a user, other calculations, data access or the like can be carried out during this waiting time. In the case of sequential execution, this is not possible. Thus with parallel execution, the overall software system is ready for a new user interaction at an earlier stage. The system also operates more effectively because the throughput is increased. The aim here is enhancement of the performance of a single program.
A further reason for the use of parallel and asynchronously operating software units is the use of multitasking systems. Multitasking systems are used, inter alia, to improve user interaction. Such multitasking systems must also be correspondingly designed and implemented for multitasking from the software standpoint, that is for the parallel handling of linked instructions or threads. The aim in this respect is the enhancement of the performance of a system with the potential for a plurality of simultaneously executed programs.
Thus, for efficiency enhancement and, on the basis of new computer architectures, software systems may be designed and implemented with parallel handling in view. Server systems, for one example, are based to a large extent on parallelism of this kind. The resulting multiform parallel interactions in the software may be difficult for a person, particularly a tester, to oversee. The individual parallel processing lines may be synchronized in the correct manner again at some time for handling a task, and not later than the end of said handling. This may entail very great potential for errors.
To summarize, asynchronous operation of software units or software components is becoming ever more desirable. However, adequate validation methods are not available in conventional systems. According to an investigation of Java code by David Hovemeyer and William Hugh [7], synchronization errors are more the rule than the exception.